import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common'
import { AppModule } from './app/app.module';
import { generateDocument } from './doc'
import { TransformInterceptor } from '@/shared/common/transform.interceptor'
import { AllExceptionFilter } from '@/shared/common/all.exception.filter'
import { HttpExceptionFilter } from '@/shared/common/http.exception.filter'
import { useContainer } from 'class-validator'
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  /**
   * 接口版本化管理
   */
  app.enableVersioning({
    defaultVersion: '1', // 全局默认版本
    type: VersioningType.URI
  })


  /**
   * 开启自定义验证依赖注入
   */
  useContainer(app.select(AppModule), { fallbackOnErrors: true })


  /**
   * 全局统一响应格式拦截器 司马坑
   */
  app.useGlobalInterceptors(new TransformInterceptor())



  /**
   * 全局异常过滤器 生产环境再开，司马的坑
   */
  // app.useGlobalFilters(new AllExceptionFilter(), new HttpExceptionFilter())


  /**
   * Swagger 文档管理
   */
  generateDocument(app)
  await app.listen(3000);
}
bootstrap();


